import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCDemo {
    public static void main(String[] args) throws SQLException {
        //插入数据
        //创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");
        //和数据库建立连接
        //必须是java.sql
        Connection connection = dataSource.getConnection();
        //构造数据库的操作语句
        //这个结构是写死的
        String sql = "insert into test values(1,'张三')";
        //改进1
        //缺点：看起来怪，1 影响可读性；2 不安全
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的学号");
        int id = scanner.nextInt();

        System.out.println("请输入你的姓名");
        String name = scanner.next();

        String sql1 = "insert into test values(" + id + ",'" + name + "')";

        //改进2
        String sql2 = "insert into test values(? , ?)";

        PreparedStatement preparedStatement1 = connection.prepareStatement(sql2);
        preparedStatement1.setInt(1,id);
        preparedStatement1.setString(2,name);


        //对语句进行预编译（对sql语句校验），减省服务器的开销
        //PreparedStatement preparedStatement = connection.prepareStatement(sql1);
        //执行sql
        //executeUpdate新增，插入，更改
        //preparedStatement.executeQuery();查询
        //返回类型是int,表示影响了几行数据；
        //执行完这个方法后，会向数据库发出请求，请求中包含了解析后的sql，等数据库执行完sql后会返回响应。即这个操作影响了几条数据
        int n = preparedStatement1.executeUpdate();
        System.out.println("n = " + n );
        //要对内存和资源进行释放
        //java有垃圾回收机制(GC),可以回收不用的内存
        //但编程过程中涉及到的有限资源不仅仅是内存。需要手动释放
        //先创建的后释放
        preparedStatement1.close();
        connection.close();

//        DataSource dataSource1 = new MysqlDataSource();
//        ((MysqlDataSource)dataSource1).setUser("fsd");
//        ((MysqlDataSource)dataSource1).setUrl("fe");
//        ((MysqlDataSource)dataSource1).setUser("vdf");
//
//        Connection connection1 = dataSource.getConnection();
//
//        String sql1 = "dcs";
//        PreparedStatement preparedStatement1 = connection1.prepareStatement(sql1);
//
//        int n1 = preparedStatement1.executeUpdate();
//
//        preparedStatement1.close();
//        connection1.close();


    }
}
